package com.keson.blueconfig;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;

public class HttpUtil {
	public static String post(String url, String parms) {
		// Post请求的url，与get不同的是不需要带参数
				try {
					URL postUrl = new URL(url);
			        // 打开连接
			        HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
			        // 设置是否向connection输出，因为这个是post请求，参数要放在
			        // http正文内，因此需要设为true
			        connection.setDoOutput(true);
			        // Read from the connection. Default is true.
			        connection.setDoInput(true);
			        // 默认是 GET方式
			        connection.setRequestMethod("POST");      
			        // Post 请求不能使用缓存
			        connection.setUseCaches(false);  
			           //设置本次连接是否自动重定向 
			        connection.setInstanceFollowRedirects(true);      
			        // 配置本次连接的Content-type，配置为application/x-www-form-urlencoded的
			        // 意思是正文是urlencoded编码过的form参数
			        connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
			        // 连接，从postUrl.openConnection()至此的配置必须要在connect之前完成，
			        // 要注意的是connection.getOutputStream会隐含的进行connect。
			        connection.connect();
			        DataOutputStream out = new DataOutputStream(connection
			                .getOutputStream());
			        // 正文，正文内容其实跟get的URL中 '? '后的参数字符串一致
			        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写到流里面
			        out.write(parms.getBytes("UTF-8"));
			        //流用完记得关
			        out.flush();
			        out.close();
			        //获取响应
			        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
			        String result = "";
			        String line;
			        while ((line = reader.readLine()) != null){
			        	result = result + line;
			        }
			        
			        reader.close();
			        //该干的都干完了,记得把连接断了
			        connection.disconnect();
			        return result;
				} catch (Exception e) {
					e.printStackTrace();
				}
				return null;
	}
	
	public static String post(String url, String parms, HashMap<String, String> header) {
		// Post请求的url，与get不同的是不需要带参数
				try {
					URL postUrl = new URL(url);
			        // 打开连接
			        HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
			        
			        
			        // 设置是否向connection输出，因为这个是post请求，参数要放在
			        // http正文内，因此需要设为true
			        connection.setDoOutput(true);
			        // Read from the connection. Default is true.
			        connection.setDoInput(true);
			        // 默认是 GET方式
			        connection.setRequestMethod("POST");      
			        // Post 请求不能使用缓存
			        connection.setUseCaches(false);  
			           //设置本次连接是否自动重定向 
			        connection.setInstanceFollowRedirects(true);      
			        // 配置本次连接的Content-type，配置为application/x-www-form-urlencoded的
			        // 意思是正文是urlencoded编码过的form参数

			        for (String key : header.keySet()) {
		            	connection.setRequestProperty(key, header.get(key));
					}
			        
			        // 连接，从postUrl.openConnection()至此的配置必须要在connect之前完成，
			        // 要注意的是connection.getOutputStream会隐含的进行connect。
			        connection.connect();
			        DataOutputStream out = new DataOutputStream(connection
			                .getOutputStream());
			        // 正文，正文内容其实跟get的URL中 '? '后的参数字符串一致
			        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写到流里面
			        out.write(parms.getBytes("UTF-8"));
			        //流用完记得关
			        out.flush();
			        out.close();
			        //获取响应
			        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
			        String result = "";
			        String line;
			        while ((line = reader.readLine()) != null){
			        	result = result + line;
			        }
			        
			        reader.close();
			        //该干的都干完了,记得把连接断了
			        connection.disconnect();
			        return result;
				} catch (Exception e) {
					e.printStackTrace();
				}
				return null;
	}

	
	public static String get(String url, String parms){
        
        // 拼凑get请求的URL字串，使用URLEncoder.encode对特殊和不可见字符进行编码  
        String getURL = url + "?" + parms;
        try {
        	URL getUrl = new URL(getURL);
            // 根据拼凑的URL，打开连接，URL.openConnection函数会根据URL的类型，  
            // 返回不同的URLConnection子类的对象，这里URL是一个http，因此实际返回的是HttpURLConnection  
            HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
            // 进行连接，但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到服务器  
            connection.connect();  
            // 取得输入流，并使用Reader读取  
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));// 设置编码,否则中文乱码
            String result = "";
	        String line;
            while ((line = reader.readLine()) != null) {  
                // lines = new String(lines.getBytes(), "utf-8");  
            	result = result + line; 
            }  
            reader.close();  
            // 断开连接  
            connection.disconnect(); 
            return result;
        }catch (Exception e) {
			e.printStackTrace();
		}
        return null;
    }
	
	public static String get(String url, String parms, HashMap<String, String> header){
        
        // 拼凑get请求的URL字串，使用URLEncoder.encode对特殊和不可见字符进行编码  
        String getURL = url + "?" + parms;
        try {
        	URL getUrl = new URL(getURL);
            // 根据拼凑的URL，打开连接，URL.openConnection函数会根据URL的类型，  
            // 返回不同的URLConnection子类的对象，这里URL是一个http，因此实际返回的是HttpURLConnection  
            HttpURLConnection connection = (HttpURLConnection) getUrl.openConnection();
            
            for (String key : header.keySet()) {
            	connection.setRequestProperty(key, header.get(key));
			}

            // 进行连接，但是实际上get request要在下一句的connection.getInputStream()函数中才会真正发到服务器  
            connection.connect();  
            // 取得输入流，并使用Reader读取  
            BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));// 设置编码,否则中文乱码
            String result = "";
	        String line;
            while ((line = reader.readLine()) != null) {  
                // lines = new String(lines.getBytes(), "utf-8");  
            	result = result + line; 
            }  
            reader.close();  
            // 断开连接  
            connection.disconnect(); 
            return result;
        }catch (Exception e) {
			e.printStackTrace();
		}
        return null;
    }
	
	public static void main(String[] args) {
	}
}
